/**
 * 权限控制中间件
 */

const express = require('express');
const util = require("../common/util");

/**
 * 
 * @param {express.Request} req 请求
 * @param {express.Response} res 响应
 * @param {express.NextFunction} next 下一个
 */
function isLogin(req, res, next){
    if(!req.session.isLogin){
        res.json(util.FormatJSONData(401, "无访问授权"));
    }else{
        next();
    }
}

/**
 * 角色是否为管理员
 * @param {express.Request} req 请求
 * @param {express.Response} res 响应
 * @param {express.NextFunction} next 下一个
 */
function isAdmin(req, res, next){
    if(req.session.user.role !== 1){
        res.json(util.FormatJSONData(403, "无访问授权"));
    }else{
        next();
    }
}

/**
 * 角色是否为管理员或用户自身
 * @param {express.Request} req 请求
 * @param {express.Response} res 响应
 * @param {express.NextFunction} next 下一个
 */
function isSelfOfAdmin(req, res, next){
    let id = Number.parseInt(req.params.id);
    if(req.session.user.id === id || req.session.user.role === 1){
        next();
    }else{
        res.json(util.FormatJSONData(403, "无访问授权"));
    }
}


/**
 * 用户是否为员工
 * @param {express.Request} req 请求
 * @param {express.Response} res 响应
 * @param {express.NextFunction} next 下一个
 */
function isEmployee(req, res, next) {
    if (req.session.user.role !== 3) {
      res.json(util.FormatJSONData(403, "无访问授权"));
    } else {
      next();
    }
  }

  /**
 * 用户是否为员工
 * @param {express.Request} req 请求
 * @param {express.Response} res 响应
 * @param {express.NextFunction} next 下一个
 */
function isEmployeeOfAdmin(req, res, next) {
    if (req.session.user.role === 2) {
      res.json(util.FormatJSONData(403, "无访问授权"));
    } else {
      next();
    }
  }

module.exports = {
    isLogin,
    isAdmin,
    isSelfOfAdmin,
    isEmployee,
    isEmployeeOfAdmin
}